unit MainFrm;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ScktComp;

type
  TMainForm = class(TForm)
    mOutput: TMemo;
    Label1: TLabel;

    ServerSocket: TServerSocket;
    buttStart: TButton;
    buttStop: TButton;

    procedure ServerSocketClientRead(Sender: TObject;
                                                      Socket: TCustomWinSocket);
    procedure buttStartClick(Sender: TObject);
    procedure buttStopClick(Sender: TObject);

  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  MainForm: TMainForm;

implementation
{$R *.DFM}

const WebRoot='C:/Webroot/';
           defaultFile='default.htm';
var
  f : TMemoryStream;


{Ham phan tch chuoi a ch URL}
Function GetRequestURL(URLStr:String):string;
var i:integer;
begin
  i:=pos('/',URLStr);
  URLStr:=Copy(URLStr,i+1,Length(URLStr));
  i:=length(URLStr);
  while i>0 do begin
    if URLStr[i]=#32 then break;
    dec(i);
  end;
  if i>0 then URLStr:=copy(URLStr,1,i);
  Result:=URLStr;
end;

procedure TMainForm.ServerSocketClientRead(
                                                 Sender: TObject;
                                                 Socket: TCustomWinSocket);

var 
    buffer:PChar;
    URL   :String;
    Zero:Byte;

begin

  mOutput.lines.clear;
  buffer:=nil;

  while Socket.ReceiveLength>0 do begin
    buffer:=AllocMem(Socket.ReceiveLength);
    Socket.receiveBuf(buffer^,Socket.ReceiveLength);
     mOutput.SetSelTextBuf(buffer);

     FreeMem(Buffer);
  end;

  URL:=Trim(getRequestURL(mOutput.lines[0]));

  if URL='' then URL:=defaultFile;

  URL:=WebRoot+URL;

  mOutput.Lines.add(URL);

 if FileExists(URL) then
 try
  f := TMemoryStream.Create;
  f.LoadFromFile(URL);

  f.Seek(0, soFromEnd);
  zero:=0;
  f.Write(zero, 1);
  f.Seek(0, soFromBeginning);


  zero:=f.size;
    Socket.SendStream(f);
 finally
 end;


  Socket.Close;

end;

procedure TMainForm.buttStartClick(Sender: TObject);
begin
  ServerSocket.Active:=True;
  buttStop.Enabled:=True;
  buttStart.Enabled:=False;
end;

procedure TMainForm.buttStopClick(Sender: TObject);
begin
  ServerSocket.Active:=False;
  buttStop.Enabled:=False;
  buttStart.Enabled:=True;
end;

end.

end.
